<?php

/**
 * Model email
 * @author Ricardo Santos Alvarenga
 * @since 8/11/2011
 */
class Application_Model_Email
{   
  
    /**
     * Metodo para limpar a base de emails
     * @author Ricardo Santos Alvarenga 
     */
    public function limparEmail()
    {
		$lemail = new Application_Model_DbTable_Email();		
		$lemail->delete();		
    }

    /**
     * Metodo para adicionar novo email
     * @param string $nome
     * @param string $email
     * @param string $sexo
     * @param string $dataNac
     * @param string $cidade
     * @param string $estado
     * @param int $optin
     * @author Ricardo Santos Alvarenga
     */
    public function addEmail ($nome,$email,$sexo,$dataNac,$cidade,$estado,$optin)
    {
        $data = array('nome' => strtoupper($nome), 'email' => strtolower($email), 'sexo' => strtoupper($sexo), 
        		'datanascimento'=>strtoupper($dataNac), 'cidade'=>strtoupper($cidade),'estado'=>strtoupper($estado),
        		'optin'=>$optin, 'token'=>md5($email.date('dmYHis').rand(0,9)));
        
        $email = new Application_Model_DbTable_Email(); 
        $db = $email->getAdapter();                 	
        $email->insert($data); 
    
    }
    

    /**
     * Retorna id de um email
     * @param String $email
     * @return array
     */
    public function procuraIdEmail ($email)
    {
        $emailModel = new Application_Model_DbTable_Email();
       	$where = $emailModel->getAdapter()->quoteInto('email=?', $email);
        return $emailModel->fetchRow($where);

    }
    /**
     * Procura email por token
     * @param string $token
     * @return ArrayObject
     */
    public function findByEmailToken($token)
    {
    	$tb = new Application_Model_DbTable_Email();
    	$where = $tb->getAdapter()->quoteInto('token=?',$token);
    	$result = $tb->fetchRow($where);
    	return $result;
    }

    /**
     * Procura um email por similaridade
     * @param string $email
     * @return array
     */
    public function procuraEmail ($email)
    {
        $emailModel = new Application_Model_DbTable_Email();
        $select = $emailModel->select()
            ->setIntegrityCheck(false)
            ->from(array('e' => 'email'))
            ->columns(array('nome'=>'e.nome', 'email' => 'e.email','idemail'=>'e.idemail'))
            ->where($emailModel->getAdapter()->quoteInto('e.email like ?', $email.'%'))     
            ->order('e.email DESC');
        return $emailModel->fetchAll($select);
    }
    
    /**
     * procura emails filtrando mx
     * @param array $lista
     * @return Ambigous <multitype:, mixed>
     */
    public function procuraEmailAvancado ($lista)
    {
        for ($i = 0; $i < count($lista); $i ++) {
            $i == 0 ? $where = "LIKE '%@" . $lista[$i]."%' " : $where .= " OR e.email LIKE '%@" . $lista[$i]."%'";
        }
        $emailModel = new Application_Model_DbTable_Email();
        $sql = 'SELECT e.* 
				FROM email e 
				WHERE e.email ' . $where;
        $result = $emailModel->getAdapter()->fetchAll($sql);
        return $result ;
    }

    /**
     * procura um email pelo id
     * @param string $idemail
     * @return array
     */
    public function procuraId ($idemail)
    {
        $email = new Application_Model_DbTable_Email();
        $where = $email->getAdapter()->quoteInto('idemail=?', $idemail);
        $remail = $email->fetchRow($where);
        return $remail->toArray();
    }
    
    /**
     * atualiza um email
     * @param int $idemail
     * @param string $nome
     * @param string $email
     * @param string $sexo
     * @param string $dataNac
     * @param string $cidade
     * @param string $estado
     * @param int $optin
     */
    public function update ($idemail,$nome,$email,$sexo,$dataNac,$cidade,$estado,$optin)
    {
        $emailModel = new Application_Model_DbTable_Email();
        $data = array('nome' => $nome, 'email' => strtolower($email), 'sexo' => $sexo, 
        		'datanascimento'=>$dataNac, 'cidade'=>$cidade,'estado'=>$estado,
        		'optin'=>$optin);
        
        $where = $emailModel->getAdapter()->quoteInto('idemail=?', $idemail);
        $emailModel->update($data, $where);
    }
    public function howOptout($idemail){
    	$tb = new Application_Model_DbTable_Email();
    	$data = array('optin'=>0);
    	$where = $tb->getAdapter()->quoteInto('idemail=?',$idemail);
    	$result = $tb->update($data,$where);
    	return $result;
    }

    /**
     * Deleta um email
     * @param int $idemail
     */
    public function excluirEmail($idemail)
    {
	    $email = new Application_Model_DbTable_Email();
	    $where = $email->getAdapter()->quoteInto('idemail =?', $idemail);
	    $email->delete($where);	
    }

	/**
	 * Função de verificação do e-mail com checagem de dns
	 * @param string $email
	 * @return boolean
	 */
	function verificaEmailDns($email) 
	{
		list($usuario,$dominio)=split("@",$email,2);
			if (checkdnsrr($dominio,"MX")) 
			{
				return true;
			} else {
				return false;
			}
	}

	/**
	 * Funcao para checar endereço de email válido
	 * @param String $email
	 * @return boolean
	 */
	public function checkEmailValido($email) 
	{
	    if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$", $email, $check))
	    {
	    	return true;
	    }
    	return false;
    }

    /**
     * Retorna todos os emails utilizando clausula dinamica para ajax
     * @param string $where
     * @return array
     */
    public function contaEmail($where)
    {
    	$emailModel = new Application_Model_DbTable_Email();
        $select = $emailModel->select()
            ->setIntegrityCheck(false)
            ->from(array('v' => 'view_email_lista_email'))           
            ->where($where);
        return $emailModel->fetchAll($select)->toArray();
    
    }
    /**
     * Seleciona os email para enviar apenas 9, um fica por conta do recuperar de senha
     * @param int $idCampanha
     * @return array
     */
    public function selecionaEmailsParaEnviar($idCampanha)
    {
    	$emailModel = new Application_Model_DbTable_Email();
    	$sql = 'SELECT 
    					e.*, fe.idfila_entrega 
				FROM 
				   		campanha_enviar ce, 
				   		fila_entrega fe, 
				   		email e 
				WHERE ce.idcampanha ='.$idCampanha.' 
				AND ce.idcampanha_enviar = fe.idcampanhaenviar
				AND e.idemail = fe.idemail
				AND fe.status = 0
				AND e.optin = 1
				LIMIT 9';
    	
    	return $emailModel->getAdapter()->fetchRow($sql);
    }
	
}

